/*
 *      AgendaViewSemaine.java
 *      
 *      Copyright 2011 Jean Clément Nigues <jeanclement@P5E3deluxe>
 *      
 *      This program is free software; you can redistribute it and/or modify
 *      it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *      (at your option) any later version.
 *      
 *      This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *      GNU General Public License for more details.
 *      
 *      You should have received a copy of the GNU General Public License
 *      along with this program; if not, write to the Free Software
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 *      MA 02110-1301, USA.
 *      
 *      
 */
package pda.agenda.ihm;

import pda.agenda.controller.*;

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class AgendaViewSemaine extends JPanel {

	private BorderLayout layout;

	private JPanel fenetreSemaineMenu;
	private BorderLayout fenetreSemaineMenuLayout;
	private JPanel fenetreSemaineContenu;
	private GridLayout fenetreSemaineContenuLayout;

	private JButton semainePrecedante;
	private JLabel semaineCourante;
	private JButton semaineSuivante;

	private JButton[] heuresUnJour;
	private JLabel[] heuresLabel;

	private JScrollPane scrollTableDesJours;

	private JTable tableDesJours;

	private MatteBorder bordureCellule;

	/**
	 * Constructeur
	 */
	public AgendaViewSemaine() {
		this.creerInterface();
		this.attacherReaction();
	}

	/**
	 * Accesseur sur le JLabel qui affiche la semaine courante.
	 * @return la référence sur ce JLabel
	 */
	public JLabel getLabelSemaineCourante() {
		return this.semaineCourante;
	}

	/**
	 * Accesseur sur le JLabel qui affiche la semaine précédante.
	 * @return la référence sur ce JButton
	 */
	public JButton getBoutonSemainePrecedante() {
		return this.semainePrecedante;
	}

	/**
	 * Accesseur sur le JButton qui affiche la semaine suivante
	 * @return la référence sur ce JButton
	 */
	public JButton getBoutonSemaineSuivante() {
		return this.semaineSuivante;
	}

	/**
	 * Créer et place les composants sur l'interface
	 */
	private void creerInterface() {

		this.layout = new BorderLayout();
		this.setLayout(layout);

		// Couleur, taille, mise en forme des composants
		Color fondMenu = new Color(41,52,57);
		BoutonMenu apparenceBouton = new BoutonMenu();

		// Menu qui permet de changer de Semaine
		this.fenetreSemaineMenu = new JPanel();
		this.fenetreSemaineMenuLayout = new BorderLayout();
		this.fenetreSemaineMenu.setLayout(fenetreSemaineMenuLayout);
		this.semainePrecedante = new JButton("<");
		this.semaineSuivante = new JButton(">");
		this.semaineCourante = new JLabel();
		
		this.fenetreSemaineMenu.setBackground(fondMenu);
		this.semaineCourante.setHorizontalAlignment(JLabel.CENTER);
		this.semaineCourante.setForeground(Color.WHITE);
		this.semaineSuivante.setUI(apparenceBouton);
		this.semainePrecedante.setUI(apparenceBouton);

		fenetreSemaineMenu.add(semainePrecedante, BorderLayout.LINE_START);
		fenetreSemaineMenu.add(semaineCourante, BorderLayout.CENTER);
		fenetreSemaineMenu.add(semaineSuivante, BorderLayout.LINE_END);

		// Liste des jours de la semaine

		// -- 24 heures et 7 jours, dont 1 colonne "heures" et 1 ligne "jours"
		this.fenetreSemaineContenu = new JPanel();
		this.fenetreSemaineContenuLayout = new GridLayout(1,1);
		this.fenetreSemaineContenu.setLayout(fenetreSemaineContenuLayout);

		this.tableDesJours = new JTable(25,8);

		this.heuresUnJour = new JButton[(24*7)];
		this.heuresLabel = new JLabel[24];

		// -- Jours de la semaine
		this.tableDesJours.setValueAt("",0,0);
		this.tableDesJours.setValueAt("Lun.\n",0,1);
		this.tableDesJours.setValueAt("Mar.\n",0,2);
		this.tableDesJours.setValueAt("Mer.\n",0,3);
		this.tableDesJours.setValueAt("Jeu.\n",0,4);
		this.tableDesJours.setValueAt("Ven.\n",0,5);
		this.tableDesJours.setValueAt("Sam.\n",0,6);
		this.tableDesJours.setValueAt("Dim.\n",0,7);

		// La ligne n°0 contient les noms des jours.
		int i = 1;
		for(i=1;i<25;i++) {
			this.tableDesJours.setValueAt((i-1)+"h",i,0);
		}
		this.fenetreSemaineContenu.add(this.tableDesJours);		

		// -- Ajoute une scrollbar à la liste des heures.
		this.scrollTableDesJours = new JScrollPane(fenetreSemaineContenu);

		// -- On ajoute tout ceci a l'onglet "Semaine"
		this.add(fenetreSemaineMenu, BorderLayout.NORTH);
		this.add(scrollTableDesJours, BorderLayout.CENTER);
	}

	/**
	 * Attache les reactions aux composants de l'interface
	 */
	private void attacherReaction() {
		EcouteurActionBouton ecouteurBouton = new EcouteurActionBouton();
		this.semainePrecedante.addActionListener(ecouteurBouton);
		this.semaineSuivante.addActionListener(ecouteurBouton);
	}

} // fin classe
